#define _CRT_SECURE_NO_WARNINGS 1

#include<iostream>
using namespace std;

//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9 };
//	int* p1 = arr;
//	int* p2 = arr + 5;
//	cout << *p1 << ' ' << *p2 << ' ' << endl;
//	printf("%p\n%p\n", p1, p2);
//	return 0;
//}


int n;
long long dp[10000000][3];
#define mod 1000000007

int main()
{
	cin >> n;
	dp[0][3] = 1;
	dp[1][3] = 1;
	for (int i = 2; i <= n; i++)
	{
		dp[i][0] = dp[i - 1][3];
		dp[i][1] = (dp[i - 1][0] + dp[i - 1][2]) % mod;
		dp[i][2] = (dp[i - 1][0] + dp[i - 1][1]) % mod;
		dp[i][3] = (dp[i - 2][3] + dp[i - 1][3] + dp[i - 1][1] + dp[i - 1][2]) % mod;
	}
	cout << dp[n][3];
	return 0;
}


//int main()
//{
//	int a = 5;
//	double& b = a;
//	return 0;
//}


//
//void swap(int& x, int& y)
//{
//	int tmp = x;
//	x = y;
//	y = tmp;
//}
//
//int main()
//{
//	int a = 2;
//	int b = 5;
//	cout << a << ' ' << b << endl;
//	swap(a, b);
//	cout << a << ' ' << b << endl;
//	return 0;
//}


//int add()
//{
//	int n = 1;
//	return n + 1;
//}
//
//
//int main()
//{
//	const int& a = add();
//	return 0;
//}

//int& Add(int a, int b)
//{
//	int c = a + b;
//	return c;
//}
//int main()
//{
//	int& ret = Add(1, 2);
//	Add(3, 4);
//	cout << "Add(1, 2) is :" << ret << endl;
//	return 0;
//}

//string& operator= (const string& str)
//{
//	if (*this == str)
//	{
//		return this;
//	}
//	char* tmp = new char(str.capacity()+1);
//	strcpy(tmp, _str);
//	delete[] _str;
//	_str = tmp;
//	_size = str.size();
//	_capacity = str.capacity;
//	return *this;
//}